package homework01;

import java.util.Arrays;

/**
 * 作业1，定义一个长度为[16][16]的整型二维数组并输入或指定所有位置的元素值
 * 分别实现二维数组中所有行和所有列中所有元素的累加和并打印。
 * 再分别实现二维数组中左上角到右下角和右上角到左下角所有元素的累加和并打印。
 */
public class ArraysSum {
	//1，声明一个16*16的二维数组
	private final int[][] arr = new int[16][16];

	public ArraysSum() {
		//2，给数组赋值
		for (int[] ints : arr) {
			Arrays.fill(ints, 1);
			arr[0][0] = 2;
			arr[0][15] = 3;
			arr[15][0] = 5;
			arr[15][15] = 7;
			System.out.println(Arrays.toString(ints));
		}
	}

	private void row() {
		//3,计算行的累加和并打印
		for (int i = 0; i < arr.length; i++) {   //行循环
			int row_sum = 0;
			for (int j = 0; j < arr[i].length; j++) { //列循环
				row_sum += arr[i][j];
			}
			System.out.println("第" + (i + 1) + "行的累加和是：" + row_sum);
		}
	}

	private void col() {
		//4,计算列的累加和并打印
		int[] col_sum = new int[16];
		for (int[] ints : arr) {   //行循环
			for (int j = 0; j < ints.length; j++) { //列循环
				//列的累加结果存放在数组里
				col_sum[j] += ints[j];
			}
		}
		for (int n = 1; n <= col_sum.length; n++) {
			System.out.println("第" + n + "列的累加和是：" + col_sum[n - 1]);
		}
	}

	private void left() {
		//5，计算左上角到右下角的元素累加并打印
		int left_up_sum = 0;
		for (int i = 0; i < arr.length; i++) {   //行循环
			for (int j = 0; j < arr[i].length; j++) { //列循环
				if (i == j) { //计算累加和：arr[0][0]+arr[1][1]+ ... + arr[15][15]
					left_up_sum += arr[i][j];
				}
			}
		}
		System.out.println("左上到右下的累加和是：" + left_up_sum);
	}

	private void right() {
		//6，计算左下角到右上角的元素累加并打印
		int right_down_sum = 0;
		for (int i = 0; i < arr.length; i++) {   //行循环
			for (int j = 0; j < arr[i].length; j++) { //列循环
				if (i + j == 15) {//计算累加和：arr[15][0]+arr[14][1]+ ... + arr[0][15]
					right_down_sum += arr[i][j];
				}
			}
		}
		System.out.println("左下到右上的累加和是：" + right_down_sum);
	}

	public void show() {
		System.out.println("------------------------------------------------");
		row();
		System.out.println("------------------------------------------------");
		col();
		System.out.println("------------------------------------------------");
		left();
		System.out.println("------------------------------------------------");
		right();
	}
}
